前言
今天要延續昨天的NumPy語法練習
內容會分成兩大部分
將會涵蓋如何提取、更新、刪除陣列裡的資料
一樣都是會練習一維跟二維陣列上的操作
利用昨天的基本語法+今天的練習,
應用在三維陣列的操作
由於數學公式眾多
所以只會包含一點常用的基本操作
剩下的還是要在需要的時候上官網查詢語法即可
這次學習的內容涵蓋之前在學校上課過的內容
還有跟昨天一樣的youtube影片
https://www.youtube.com/watch?v=QUT1VHiLmmI&t=394s
基本語法練習
透過索引值提取單筆資料
一維陣列: [索引值] 只需要在括號裡加上索引值即可
arr = np.array([1,2,3])
arr[2] #這裡想要取得索引值為2的數值
'''
3
'''
二維陣列:[row, column] ([第一維的索引值, 第二維的索引值])
#創建二維陣列
a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a)
'''[[ 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14]]'''
# 在二維陣列裡使用[row,column],
# 前面放的是要取的第一個維度(row),後面放的是第二個維度(column)
a[1,5] # 使用a[1,-2]也可取得同樣位置 #也可表示為a[1][5]
'''13'''
透過切片取出特定元素內容:" : "
一維陣列:
arr1 = np.arange(0, 10)
print(arr1)
'''array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])'''
arr1[5:] #想取得索引值為5之後所有的數值
'''array([5, 6, 7, 8, 9])'''
arr1[:5] #想取得索引值為5之前的所有數值
'''array([0, 1, 2, 3, 4])'''
二維陣列:
# 當我們要取得特定的row時
a[0,:] # 在第二個維度選項時使用 ":",可以取得第1個row裡所有的值
''' array([1, 2, 3, 4, 5, 6, 7])'''
# 當我們要取得特定的column
a[:, 2]# 在第一個維度選項時使用 ":",可以取得第2個column裡所有的值
'''array([ 3, 10])''' #第二列裡的兩個值就被取出來了
# 橫向切片
a[:1]
'''array([[1, 2, 3, 4, 5, 6, 7]])'''
按照指定間隔取值:[start index : end index: step size]
一維陣列
#首先先建立一個1~12的一維陣列
prac = np.arange(13)
print(prac)
#若是我們想要他以偶數形式出現,step size設為2
even_num = prac[0:13:2]
'''[ 0 2 4 6 8 10 12]'''
#若是想要出現0,4,8,12, stepsize要設為4
print(prac[0:13:4])
'''[ 0 4 8 12]'''
二維陣列
# 在二維陣列中,我們先來看原本的a長怎樣
a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a)
'''[[ 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14]]'''
# 如果我們想要看到 2,4,6
# [從第一個row裡面去查, (start with 2: end in 5: stepsize 2)]
print(a[0, 1:6:2]) # 從後面開始算可以使用(-1) : a[0, 1:-1:2]
'''array([2, 4, 6])'''
更新值:直接用索引值取代原本的值
#創建二維陣列
a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a)
'''[[ 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14]]'''
#當我們想要把13換成200
a[1,5] = 200 # 13的索引值為[1,5]替換成200
'''[[ 1 2 3 4 5 6 7]
[ 8 9 10 11 12 200 14]]'''
#當我們想要改掉整個row或是column
a[:,2] = 55 # 想要把第二個column改成55
'''[[ 1 2 55 4 5 6 7]
[ 8 9 55 11 12 200 14]]'''
刪除資料:np.delete(陣列名稱, 索引值, axis=None)
# 首先創建任意數列
arr = np.arange(5,17)
print(arr)
'''[ 5 6 7 8 9 10 11 12 13 14 15 16]'''
#當我們想要刪除8的話(索引值為3)
print(np.delete(arr,3))
'''[ 5 6 7 9 10 11 12 13 14 15 16] '''
# 可以看到8不見了
#使用切片的方法,指定切片位置
#當我們想要切掉5~9的時候
print(np.delete(arr,slice(0,5)))
'''[10 11 12 13 14 15 16] '''
複製陣列:.copy()
#當我們複製陣列的時候要很小心是否會影響到原本的陣列
#首先來看個例子
a = np.array([1,2,3])
b = a
b[0] = 100 #如果想把b裡面的1改成100
print(b)
print(a)
'''
[100 2 3]
[100 2 3]'''
# 我們可以看到a的1也同時變為100
# 應該使用.copy()的語法 避免更改到原始值
a = np.array([1,2,3])
b = a.copy()
b[0] = 100
print(b)
print(a)
'''
[100 2 3]
[1 2 3]'''
# 可以看到使用copy後就不會更改到a的原始數值
多個矩陣相加:
# 垂直方向上相加矩陣
v1 = np.array([1,2,3,4])
v2 = np.array([5,6,7,8])
print(np.vstack([v1,v2])) #先看看兩個矩陣加起來的樣子
print("---------")
print(np.vstack([v1,v2,v1,v2]))
'''
[[1 2 3 4]
[5 6 7 8]]
---------
[[1 2 3 4]
[5 6 7 8]
[1 2 3 4]
[5 6 7 8]]'''
#水平方向上相加矩陣
h1 = np.zeros((2,4))
h2 = np.zeros((2,2))
np.hstack((h1,h2))
'''array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])'''
用三維度陣列練習基礎語法
首先利用 np.array建立指定數值的三維陣列
b = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(b)
'''
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]'''
接下來要來取值,當我們想要取4的時候
# []內的索引值要從外到內寫
# 如果想要查到4
# 從第1個維度的第0個row > 第2個維度的第1個索引值 > 第3個維度的第2個索引值
print(b[0,1,1])
'''4'''
更進階一點,看一下怎麼操作
# get more fancy
print(b[:,0,:]) # 第1個維度的全部 > 第2個維度的第0個索引值 > 第3個維度的全部
print("-----")
print(b[:,0,0]) # 第1個索引值的全部 > 第2個維度的第0個索引值 > 第3個維度的第0個索引值
'''
[[1 2]
[5 6]]
-----
[1 5]'''
練習取代其他值
# 先隨便找一個位置
print(b[:,1,:]) # 看他長怎樣
'''
[[3 4]
[7 8]]'''
#當我們發現他是2*2的陣列時,替換成隨意的他值
b[:,1,:] = [[9,9],[8,8]]
print(b) #重新看b印出來會怎樣
'''
[[[1 2]
[9 9]]
[[5 6]
[8 8]]]
'''
結語
NumPy 的基礎語法跟練習就差不多到這裡了!
對陣列運算還有NumPy也有更深一層的理解
明天就會往數學運算的方向繼續練習
gogogo